class VisitasController < ApplicationController
  
  before_filter :login_required

  require_role 'marketing', :only=>[:destroy]
  require_role 'admin', :only=>[:actualizar_matriculas]

  # TODO visitas telefonicas

  def index
    store_location
    list
    render :action => 'list'
  end

  # GETs should be safe (see http://www.w3.org/2001/tag/doc/whenToUseGet.html)
  verify :method => :post, :only => [ :destroy, :create, :update ],
         :redirect_to => { :action => :list }

  def list
    store_location
    @visita_pages, @visitas = paginate :visitas, :per_page => 20, :order=>'fecha DESC'
    
    @page, @lnk_from, @lnk_to = numeros_pagina @visita_pages
  end

  def show
    store_location
    @visita = Visita.find(params[:id])
    @persona = @visita.persona
  end

  # persona y visita simultaneos
  def new
    store_location
    @persona = Persona.new
    @visita = Visita.new
    
    # los defaults
    @visita.instructor_id = current_user.instructor.id
    @visita.fecha = DateTime.now()
  end

  # creacion de una persona y su primer visita
  # analogo a create
  def create_persona_visita
    raise ArgumentError, "No se pudo crear la persona ni registrar la visita, hubo un error y la informaci&oacute;n no fue transmitida. Vuelva a intentarlo." unless params[:persona] and params[:visita]
    
    @persona = Persona.new(params[:persona])
    @persona.tag_list = params[:tags]

    #genero un @visita para que de haber error los valores ingresados se mantengan al renderizar
    @visita = Visita.new(params[:visita])
    unless params[:visita][:instructor_id] then
      @visita.instructor_id = current_user.instructor.id
    end
    
    if @persona.save
      @visita.persona_id = @persona.id
      # guardo el coeficiente en la visita tambien
      @visita.coeficiente = @persona.coeficiente
      if @visita.save
        flash[:success] = 'Visita registrada.'
        redirect_to :action => 'show', :controller=>'prospects', :id=>@persona
      else
        @persona.destroy
        render :action => 'new'
      end
    else
      render :action => 'new'
    end
    
  rescue ArgumentError => exception
      flash[:error] = exception.message
      redirect_back_or_default :controller=>:main, :action=>:index
  rescue => e
    K_LOGGER.error "Error no estipulado en create_persona_visita: #{e.message}"
    flash[:error] = "Error inesperado no se pudo registrar la informaci&oacute;n"
    redirect_back_or_default :controller=>:main, :action=>:index      
  end

  # agrega visita a persona ya existente
  def add
    @visita = Visita.new
    
    # defaults
    @visita.instructor_id = current_user.instructor.id
    @visita.fecha = DateTime.now()
    
    # preseteo el alumno segun lo que llego por params
    if params[:visita_alumno] != nil then 
      @visita.persona_id = params[:visita_alumno]
    end

  end

  def create
    @visita = Visita.new(params[:visita])

    unless @visita.coeficiente then
      # guardo el coeficiente tambien en la visita
      @visita.coeficiente = @visita.persona.coeficiente
    end
    if @visita.save
      flash[:success] = 'La visita fue creada con exito.'
      redirect_to :action => 'show', :controller=>'prospects', :id=>@visita.persona_id
    else
      render :action => 'add'
    end
  end

  def edit
    @visita = Visita.find(params[:id])
  end

  def update
    @visita = Visita.find(params[:id])
    if @visita.update_attributes(params[:visita])
      flash[:success] = 'La visita fue editada con exito.'
      redirect_back_or_default :action => 'show', :id => @visita
    else
      render :action => 'edit'
    end
  end

  def destroy
    Visita.find(params[:id]).destroy
    redirect_back_or_default :action => 'list'
  end

  def externos
#  dejo que se pueda agregar una visita a cualquier persona, incluso a los alumnos. 
# por si lo que se quiere hacer es registrar una visita de alguien en el pasado.
#    paginar_personas "coeficiente_id<>#{Coeficiente::ALUMNO}"
    paginar_personas 1
  end

  # este search se utiliza en para registrar visitas de personas ya registradas en el sistema.
  def live_search
    paginar_personas 1
    render :partial=>'hits', :locals=>{:nombres=>params[:nombres],:apellidos=>params[:apellidos],:mail=>params[:mail],:profesion=>params[:profesion]}
  end
  
end